package leetcode.editor.cn;

/**
 * ******************************************************
 *
 * @author liugh9
 * @version 1.0
 * @classname ForEachArrays
 * @description 遍历数组的三种方式
 * @date 2023/05/10 21:28
 * <p>
 * ******************************************************
 */
public class ForEachArrays {


    public static void main(String[] args) {
        int[][] a = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        int m = a.length;
        int n = a[0].length;
        // 正向遍历数组
        System.out.println("-------------正向遍历数组-------------");
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                // 计算 dp[i][j]
                System.out.print(a[i][j]);
            }
        }
        System.out.println();
        // 反向遍历数组
        System.out.println("-------------反向遍历数组-------------");
        for (int i = m - 1; i >= 0; i--) {
            for (int j = n - 1; j >= 0; j--) {
                // 计算 dp[i][j]
                System.out.print(a[i][j]);
            }
        }
        System.out.println();
        // 斜着遍历数组
        System.out.println("-------------斜着遍历数组-------------");
        for (int l = 2; l <= m; l++) {
            for (int i = 0; i <= n - l; i++) {
                int j = l + i - 1;
                // 计算 dp[i][j]
                System.out.print(a[i][j]);
            }
        }
        System.out.println();
    }





    int count = 0;

    void printIndent(int n) {
        for (int i = 0; i < n; i++) {
            System.out.print("   ");
        }
    }

    /**
     * 如何给算法 debug
     * 在递归函数的开头，调用 printIndent(count++) 并打印关键变量；
     * 然后在所有 return 语句之前调用 printIndent(--count) 并打印返回值。
     * @param ring
     * @param i
     * @param key
     * @param j
     * @return
     */
    int dp(String ring, int i, String key, int j) {
        // printIndent(count++);
        // System.out.format("i = %d, j = %d%n", i, j);

        if (j == key.length()) {
            // printIndent(--count);
            // System.out.println("return 0");
            return 0;
        }

        int res = Integer.MAX_VALUE;
        for (int k : new int[]{1,2,3}) {
            res = Math.min(res, dp(ring, j, key, i + 1));
        }

        // printIndent(--count);
        // System.out.format("return %d%n", res);
        return res;
    }


}
